<?php
//   +----------------------------------------------------------------------
//   | Copyright (c) 2015-2025 http://www.hdphp.cn All rights reserved.
//   | Licensed ( http://www.hdphp.cn/licenses/ )
//   | Author: Jack <sophia2152@qq.com>
//   | 官方网址: http://www.hdphp.cn
//   | 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用。
//   | 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
//   +----------------------------------------------------------------------
namespace hdphp\services\wechat\orderShipping;

use hdphp\exceptions\AdminException;

/**
 * Class：Utility
 * 创建人：Jack
 * 创建时间：2023/11/30 14:45
 * @package hdphp\services\wechat\orderShipping
 */
class Utility
{
    /**
     * 注释：paddingModeLimitedCheck
     * 创建人：Jack
     * 创建时间：2023/11/30 14:45
     * @param int $padding
     * @return void
     */
    private static function paddingModeLimitedCheck(int $padding): void
    {
        if (!($padding === OPENSSL_PKCS1_OAEP_PADDING || $padding === OPENSSL_PKCS1_PADDING)) {
            throw new AdminException(sprintf("Doesn't supported padding mode(%d), here only support OPENSSL_PKCS1_OAEP_PADDING or OPENSSL_PKCS1_PADDING.", $padding));
        }
    }

    /**
     * 注释：加密数据
     * 创建人：Jack
     * 创建时间：2023/11/30 14:45
     * @param string $plaintext
     * @param int    $padding
     * @return string
     */
    public function encryptor(string $plaintext, int $padding = OPENSSL_PKCS1_OAEP_PADDING)
    {
        self::paddingModeLimitedCheck($padding);

        if (!openssl_public_encrypt($plaintext, $encrypted, $this->getPublicKey(), $padding)) {
            throw new AdminException('Encrypting the input $plaintext failed, please checking your $publicKey whether or nor correct.');
        }

        return base64_encode($encrypted);
    }

    /**
     * 注释：encryptTel
     * 创建人：Jack
     * 创建时间：2023/11/30 14:45
     * @param $tel
     * @return array|string|string[]
     */
    public static function encryptTel($tel)
    {
        return substr_replace($tel, '****', 3, 4);
    }

}
